/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.unl.asd.controlador;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import jxl.Sheet;
import jxl.Workbook;

/**
 *
 * @author JorgeLuis
 */
public class GeneraTablaSintactica {
    
    private List<String> terminales;
    private List<String> noTerminales;
    private String[][] tablaSintactica;
    private List<String> elementosTabla;
    JTextArea TxatablaSintactica;
    
    /**
     * 
     * @param txatablaSintactica
     */
    public GeneraTablaSintactica(JTextArea txatablaSintactica) {
        this.TxatablaSintactica = txatablaSintactica;
        this.elementosTabla= new ArrayList<String>();
        terminales = new ArrayList<String>();
        noTerminales = new ArrayList<String>();
        generaTabla();
        generaListaTerminales();
        generaListaNoTerminales();
        
    }
    
    /**
     * Este método permite generar los nodos  terminales
     */
    public void generaListaTerminales() {
        try {
            int numeroCol = tablaSintactica.length;
            for (int i = 0; i < numeroCol; i++) {
                terminales.add(tablaSintactica[0][i]);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e, "ATENCIÓN", JOptionPane.PLAIN_MESSAGE);
        }
        
    }
    
    /**
     * Este método permite generar los nodos no terminales
     */
    public void generaListaNoTerminales() {
        try {
            int numeroFil = tablaSintactica.length;
            for (int i = 0; i < numeroFil; i++) {
                noTerminales.add(tablaSintactica[i][0]);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e, "ATENCIÓN", JOptionPane.PLAIN_MESSAGE);
        }
    }
    
    /**
     * Este método permite generar la tabla Sintáctica
     */
    public void generaTabla() {
        File file = new File("../recursos/TablaSintactica.xls");
        
        try {
            Workbook archivo_excel = Workbook.getWorkbook(file);
            Sheet hoja = archivo_excel.getSheet(0);
            int num_columnas = hoja.getColumns();
            int num_filas = hoja.getRows();
            tablaSintactica = new String[num_filas][num_columnas];
            for (int i = 0; i < num_filas; i++) {
                
                for (int j = 0; j < num_columnas; j++) {
                    System.out.println("");
                    tablaSintactica[i][j] = hoja.getCell(j, i).getContents();
                    elementosTabla.add(tablaSintactica[i][j]+"\t");           
                }
                elementosTabla.add("\n");
              
                
            }
            vistaTabla();
            
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e, "ATENCIÓN", JOptionPane.PLAIN_MESSAGE);
        }
    }
    /**
     * 
     */
    public void vistaTabla(){
        TxatablaSintactica.setText(elementosTabla.toString().replace("[", "").replace("]","").replace(",", ""));
    }
    /**
     * 
     * @return
     */
    public List<String> getNoTerminales() {
        return noTerminales;
    }
    
    /**
     * 
     * @param noTerminales
     */
    public void setNoTerminales(List<String> noTerminales) {
        this.noTerminales = noTerminales;
    }
    
    /**
     * 
     * @return
     */
    public List<String> getTerminales() {
        return terminales;
    }
    
    /**
     * 
     * @param terminales
     */
    public void setTerminales(List<String> terminales) {
        this.terminales = terminales;
    }
    
    /**
     * 
     * @return
     */
    public String[][] getTablaSintactica() {
        return tablaSintactica;
    }
    
    /**
     * 
     * @param tablaSintactica
     */
    public void setTablaSintactica(String[][] tablaSintactica) {
        this.tablaSintactica = tablaSintactica;
    }
}
